游戏而已

面试

面试就像一场考试,凡是考试,必有技巧。

关于面试

技术面试

考查技术

负责人面试

考查更综合:
项目把控能力
项目深度
项目架构能力
业务能力

HR 面试

性格
沟通
潜力

面试技巧

有高度:宏观思考

有广度:思维扩散

有低度:底层原理

内存

如何看待面试

什么是面试

面试是测查和评价人员能力素质的一种考试活动。具体来说,面试是一种经过组织者精心设计,在特定场景下,以考官对考生面对面交谈与观察为主要手段,由表及里测评考生的知识能力经验等有关素质的一种考试活动。

面试那些事



面试准备

JD 分析

业务分析或实战模拟

技术站准备

自我介绍


模拟一面



模拟二面


模拟三面



模拟终面



面试者

基层工程师 - 基础知识

工程师的自我修养 - 基础 - 扎实的基础会让你高效的学习新技术

高级工程师 - 项目经验

架构师 - 解决方案

面试官

面试流程


面试题

考点 考线 考面 考体

考点 - 知识点
考线 - 知识线
考面 - 知识面
考体 - 知识体

知识点是有限的,题是无限的

题目 = 有限的知识点 + 无限的角度

从无到有,从有到无:
点 - 线 - 面 - 体 - 面 - 线 - 点




尽管题目是无限的,但知识点是有限的

解题思路

分析考题 -- 考点(知识点)和出题者的意图(角度)

提取关键词 -- 考什么、问题角度

整理答题思路

组织答案

给出答案

扩展知识点

扩展问题角度

归纳总结

面试技巧

JS


JS 基础

语法、变量类型

JS 的三座大山:原型和原型链、作用域和闭包、异步和单线程

JS 中使用 typeof 能得到那些类型
考点:JS 变量类型
扩展:类型转换

何时使用 === 何时使用 ==
考点:强制类型转换
扩展:
if (obj.a == null) {
  // 这里相当于 obj.a === null || obj.a === undefined
  // 这是 jQuery 源码中推荐的写法,其他情况尽量使用 ===
} function fn(a, b) { // 这里也相当于 a === null || a === undefined if (a == null) {} }

JS 中有哪些内置函数
考点:内置函数
Object Array Boolean Number String Function Date RegExp Error ...

JS 变量按照存储方式有哪些类型,并描述其特点

如何理解 JSON
考点:对 JSON 的认识
在 JS 中如何理解 JSON:JSON 是一种数据格式,JS 中内置有 JSON 对象并附有两个 API(即 Stringify 和 parse 函数)

window.onload 和 DOMContentLoaded 的区别
考点:浏览器渲染过程

用 JS 创建 10 个 <a> 标签,点击的时候弹出对应的序号
考点:作用域

简述如何实现一个模块加载器,实现类似 require.js 的基本功能
考点:JS 模块化

实现数组的随机排序
考点:JS 基础算法

原型和原型链

知识点:
构造函数
构造函数 - 扩展
原型规则和示例
原型链
instanceof

问题:
如何准确判断一个变量是数组类型 -- 变量 instanceof Array
let arr = []
arr instanceof Array // true
typeof arr // object     typeof 是无法引用类型的详细类型的
写一个原型链继承的例子
// 仅供学习时使用,真实面试时不建议这样写,最好写一个贴近工作的例子
function Animal () {
  this.eat = function () {
    console.log('animal eat')
  }
}
function Dog () {
  this.bark = function () {
    console.log('dog bark')
  }
}
Dog.prototype = new Animal()
let hashiqi = new Dog()
hashiqi.bark() // 'dog bark'
hashiqi.eat() // 'animal eat'
// 实战应用  --  面试时应该是这样的类似答案
function Elem(id) {
  this.elem = document.getElementById(id)
}
Elem.prototype.html = function(val) {
  let elem = this.elem
  if (val) {
    elem.innerHTML = val
    return this // 链式操作
  } else {
    return elem.innerHTML
  }
}
Elem.prototype.on = function (type, fn) {
  let elem = this.elem
  elem.addEventListener(type, fn)
  return this // 链式操作
}
let div1 = new Elem('detail-page')
// console.log(div1.html())
div1
  .html('<p>hello interviewer</p>')
  .on('click', function () {
    alert('clicked')
  })
  .html('<p>javascript</p>')


描述 new 一个对象的过程


function Foo(name, age) {
  // let this = {} // 有 new 关键字时,默认执行这一行代码
  this.name = name
  this.age = age
  this.class = 'class-1'
  // return this // 有 new 关键字时,默认执行这一行代码
} let foo = new Foo('zhangsan', 20)

zepto(或其他框架)源码中如何使用原型链

作用域和闭包

知识点:
执行上下文
this
作用域
作用域链
闭包

题目:
对变量提升的理解
this 的使用场景


创建 10 个 <a> 标签,点击的时候弹出来相应的序号




如何理解作用域  --  自由变量、作用域链(自由变量的查找)、闭包的两个使用场景(返回函数、函数作为参数)


实际开发中闭包的应用

异步和单线程

知识点:
什么是异步(对比同步)
前端使用异步的场景
异步和单线程




考题:
同步和异步的区别是什么?分别举一个例子说明。






对 setTimeout 的理解


前端使用异步的场景有哪些








其他

知识点:
Date
Math  -- Math.random 在前端的应用如可以用于清空缓存
数组 API
对象 API


考题:
获取 2017-06-10 格式的日期

获取随机数,要求长度是一致的字符

写一个能遍历对象和数组的通用 forEach 方法

JS-WEB-API

考点:
navigator、screen、location、history
DOM 本质  -- 树结构
DOM 节点操作
DOM 结构操作  -- 增删查改
AJAX -- XMLHttpRequest、状态码、跨域
事件 -- 通用事件绑定、事件冒泡、代理

考题:
如何检测浏览器的类型

拆解 URL 的各部分

DOM 是哪种基本的数据结构? - 树结构
DOM 操作的常用 API 有哪些?


DOM 节点的 attribute 和 property 有何区别?
  property 指的是 JS 对象的属性
  attribute 指的是 HTML 标签上的属性








事件考题
编写一个通用的事件监听函数




描述事件冒泡流程



对于一个无限下拉加载图片的页面,如何给每个图片绑定事件


手动编写一个 ajax,不依赖第三方库




跨域的几种实现方式



















JS 开发环境

JS 运行环境


网络

互联网的原理是什么?

上网的原理就是请求数据,就是文件传输。

服务器上存放着网页的相关文件,包括HTTP文件、CSS文件、JS文件、图片等。当我们打开浏览器,输入网址,我们的计算机就会对这些文件发出HTTP请求。

服务器收到请求之后,会把这些文件通过
HTTP协议,传输到我们的计算机中(保存到了某个临时文件夹中)。这些文件,将在我们计算机本地的浏览器中,进行渲染、呈递。

为什么第二次打开同一个网页,会比第一次快?

因为第一次打开网页的时候,所有的图片、HTML等文件都已经请求到本地并存放在你的计算机上的某个临时文件夹里了。当你重新打开该网页的时候,浏览器会优先从该临时文件夹上读取数据。
  
故这就是为什么每次用360等软件能清理一堆垃圾,释放很多硬盘空间的原因。

-- 当然这里有一个前提:重新打开同一网页的时候没有清空该浏览器的缓存。

什么是 HTTP 协议?

超文本传输协议,Hypertext Transfer Protocol

这是一个文件的传输协议,我们上网的时候,所有的文件都是通过HTTP这个协议,从服务器上传输到客户的电脑里面的。

现在我们必须要树立一个思想,就是每一个网址,都对应着确定的服务器上的文件。

什么是网页?

网页是真实的物理的文件。并且一个网页是由很多物理文件组成的:html 文件、图片文件、js 文件、css 文件。这些文件要通过特殊软件才能上传到服务器上。然后就能让用户看了。用户通过浏览器,访问网址,服务器上面的文件就会通过 http 请求悄悄地传输到用户的电脑中的临时文件夹中,在用户的电脑中执行、渲染、呈递。

什么是服务器?

服务器就是计算机,只不过比一般笔记本的配置牛逼了很多,并且24小时不断电,不关机。
服务器上存储着网页的相关文件。一旦有访问者浏览网站,服务器就将发送这些文件给访问者。
服务器一旦关机,网站就无法访问了。

什么是浏览器?

浏览器是安装在客户的电脑里面的,是一个软件,能够让用户上网。
浏览器有版本之分,有浏览器兼容问题。

对WEB标准以及W3C的理解与认识

标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外 链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维 护、改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性。

介绍一下你对浏览器内核的理解?

主要分成两部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎。

  渲染引擎:负责取得网页的内容(HTML、XML、图像等等)、整理讯息(例如加入CSS等),以及计算网页的显示方式,然后会输出至显示器或打印机。浏览器的内核的不同对于网页的语法解释会有不同,所以渲染的效果也不相同。所有网页浏览器、电子邮件客户端以及其它需要编辑、显示网络内容的应用程序都需要内核。

  JS引擎则:解析和执行javascript来实现网页的动态效果。

  最开始渲染引擎和JS引擎并没有区分的很明确,后来JS引擎越来越独立,内核就倾向于只指渲染引擎。

浏览器

浏览器的内核分别是什么?

IE -- Trident
Mozilla -- Gecko
Chrome -- Blink(WebKit的分支)
Opera -- Presto,现为Blink;

Cookie 的优缺点 

  cookie虽然在持久保存客户端数据提供了方便,分担了服务器存储的负担,但还是有很多局限性的; 每个特定的域名下最多生成20个cookie;IE和Opera 会清理近期最少使用的cookie,Firefox会随机清理cookie;cookie的最大大约为4096字节,为了兼容性,一般不能超过4095字节;

  优点:极高的扩展性和可用性

  1.通过良好的编程,控制保存在cookie中的session对象的大小。

  2.通过加密和安全传输技术(SSL),减少cookie被破解的可能性。

  3.只在cookie中存放不敏感数据,即使被盗也不会有重大损失。

  4.控制cookie的生命期,使之不会永远有效。偷盗者很可能拿到一个过期的cookie。

  缺点:

  1.Cookie数量和长度的限制。每个domain最多只能有20条cookie,每个cookie长度不能超过4KB,否则会被截掉。

  2.安全性问题。如果cookie被人拦截了,那人就可以取得所有的session信息。即使加密也与事无补,因为拦截者并不需要知道cookie的意义,他只要原样转发cookie就可以达到目的了。

  3.有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

浏览器兼容性问题

要知道典型的IE6兼容问题(面试要问),但是做项目我们兼容到IE8

浏览器的市场占有率: http://tongji.baidu.com/data/

HTML5浏览器打分:http://html5test.com/results/desktop.html

常见兼容性问题?

选择器问题

IE6层面兼容的: 标签选择器、id选择器、类选择器、后代、交集选择器、并集选择器、通配符。

1           p
2           #box
3           .spec
4           div p
5           div.spec
6           div,p
7           *

IE7能够兼容的:儿子选择器、下一个兄弟选择器

1           div>p
2           h3+p

IE8能够兼容的:

1           ul li:first-child
2           ul li:last-child

微型盒子问题

IE6,不支持高小于12px的盒子,任何高小于12px的盒子,在IE6中看都大

1  height: 4px;
2  _font-size: 0;
div{
width: 700px;
height: 4px;
background-color: red;
}
<body>
<div></div>
</body>
chrome

IE6


解决办法很简单,就是将盒子的字号,设置小(小于盒子的高),比如0
div{
width: 700px;
height: 4px;
_font-size: 0;
background-color: red;
}
chrome
IE6


浏览器hack

hack就是“黑客”,就是使用浏览器提供的后门,针对某一种浏览器做兼容。

IE6留了一个后门,就是只要给css属性之前,加上下划线,这个属性就是IE6认识的专有属性。

比如:


解决微型盒子,正确写法:

1   height: 10px;
2   _font-size: 0;    伴生属性。

清除浮动问题

IE6不支持用overflow:hidden;来清除浮动。

解决办法,以毒攻毒。追加一条

1   _zoom:1;

完整写法:

1  overflow: hidden;
2   _zoom:1;     伴生属性。

实际上,_zoom:1;能够触发浏览器hasLayout机制。这个机制,不要深究了,因为就IE6有。我们只需要让IE6好用,具体的实现机制,自行百度。

强调一点, overflow:hidden;的本意,就是溢出盒子的border的东西隐藏,这个功能是IE6兼容的。不兼容的是overflow:hidden;清除浮动的时候。

margin 问题

IE6双倍margin bug

当出现连续浮动的元素,携带和浮动方向相同的margin时,队首的元素,会双倍marign


解决方案:

1)使浮动的方向和margin的方向,相反。

所以,你就会发现,我们特别喜欢,浮动的方向和margin的方向相反。并且,前端开发工程师,把这个当做习惯了。

1             float: left;
2             margin-right: 40px;

2)使用hack(没必要,别惯着这个IE6

单独给队首的元素,写一个一半的margin (伴生属性)

IE6 bug

双边距 BUG 

浮动ie产生的双倍距离(IE6双边距问题:在IE6下,如果对元素设置了浮动,同时又设置了margin-left或margin-right,margin值会加倍。) #box{ float:left; width:10px; margin:0 0 0 100px;} 这种情况之下IE会产生20px的距离,解决方案是在float的标签样式控制中加入 ——_display:inline;将其转化为行内属性。(_这个符号只有ie6会识别)

png24 位的图片在 iE6 浏览器上出现背景

解决方案是做成PNG8.也可以引用一段脚本处理.

超链接 hover 点击后失效 

使用正确的书写顺序 link visited hover active

z-index 问题 

给父级添加 position:relative

png 透明 

使用js代码 改

min-height 最小高度 

!Important 解决

为什么没有办法定义 1px 左右的宽度容器

IE6 默认的行高造成的,使用 overflow:hidden; zoom:0.08; line-height: 1px;

3px bug

使用float引起的 使用dislpay:inline -3px



解决办法:

不用管,因为根本就不允许用儿子踹父亲。所以,如果你出现了3px bug,说明你的代码不标准。 

IE6,千万不要跟他死磕、较劲,它不配。 格调要高,老师给你讲,就是为了增加面试的成功率。不是为了让你成为IE6的专家。

HTML 问题

什么是纯文本文件?

只能保存文本内容,无法记录文本样式。
html、css、js 都是纯本文。

什么是 HTML?

HTMLHyperText Markup Language 的缩写,超文本标记语言。

HTML是负责描述文档语义的语言。
HTML中,除了语义,其他什么都没有。
.html就是网页的格式。

xhtml 和 html 有什么区别

  HTML是一种基本的 WEB 网页设计语言,XHTML 是一个基于 XML 的置标语言 最主要的不同:

  XHTML 元素必须被正确地嵌套。

  XHTML 元素必须被关闭。

  标签名必须用小写字母。

  XHTML 文档必须拥有根元素。

浏览器标准模式和怪异模式之间的区别是什么?

  盒子模型 渲染模式的不同

  使用 window.top.document.compatMode 可显示为什么模式

Doctype 作用?标准模式与兼容模式各有什么区别?

(1)、<!DOCTYPE>声明位于HTML文档中的第一行,处于 <html> 标签之前。告知浏览器的解析器用什么文档标准解析这个文档。DOCTYPE不存在或格式不正确会导致文档以兼容模式呈现。

(2)、标准模式的排版 和JS运作模式都是以该浏览器支持的最高标准运行。在兼容模式中,页面以宽松的向后兼容的方式显示,模拟老式浏览器的行为以防止站点无法工作。

Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

  (1)、声明位于文档中的最前面,处于标签之前。告知浏览器的解析器,用什么文档类型规范来解析这个文档。

  (2)、严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。

  (3)、在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。

  (4)、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。

HTML5 为什么只需要写 <!DOCTYPE HTML>?

HTML5 不基于 SGML,因此不需要对DTD进行引用,但是需要doctype来规范浏览器的行为(让浏览器按照它们应该的方式来运行);

而HTML4.01基于SGML,所以需要对DTD进行引用,才能告知浏览器文档所使用的文档类型。

行内元素有哪些?块级元素有哪些? 空(void)元素有那些?

首先:CSS规范规定,每个元素都有display属性,确定该元素的类型,每个元素都有默认的display值,如div的display默认值为“block”,则为“块级”元素;span默认display属性值为“inline”,是“行内”元素。

(1)行内元素有:a b span img input select strong(强调的语气)
(2)块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p

(3)常见的空元素:
    <br> <hr> <img> <input> <link> <meta>
    鲜为人知的是:
    <area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>

说下行内元素和块级元素的区别?行内块元素的兼容性使用?(IE8 以下)

  (Q1) 行内元素:会在水平方向排列,不能包含块级元素,设置width无效,height无效(可以设置line-height),margin上下无效,padding上下无效。

  块级元素:各占据一行,垂直方向排列。从新行开始结束接着一个断行。

  (Q2) 兼容性:display:inline-block;*display:inline;*zoom:1;

h1 标签的作用?

正确答案:给文本增加主标题的语义
错误答案:给文字加粗、加黑、变大


标准答案:

 <img src="../../photo/1.png" />

解释:

现在document是最大的文件夹,里面有两个文件夹workphotowork中又有一个文件夹叫做mywebmyweb文件夹里面有index.html  所以index.htmlmyweb文件夹里面,上一级就是work文件夹,上两级就是document文件夹。通过document文件夹当做一个中转站,进入photo文件夹,看到了1.png

HTML 标签的分类

HTML标签是分等级的,HTML将所有的标签分为两种:容器级、文本级
顾名思义,容器级的标签,里面可以放置任何东西;文本级的标签里面,只能放置文字、图片、表单元素


p 标签是一个文本级标签

p里面只能放文字、图片、表单元素等文本元素。其他的一律不能放。

HTML 文档类型声明种类

a是一个文本级的标签

a 的语义要小于 p,a 可以当做文本来处理,所以 p 里面相当于放的就是纯文字。

title 标签

<title>出现在<head>里面,表示页面的标题。直观上,我们可以在浏览器的标题栏(标签栏)中看见。

B正确。


HTML 的本质


HTML只依靠标签对儿表达语义,和是否缩进、换行没有任何关系!只要是标签有正确的嵌套关系,正确的父子关系,那么就是一个合法的HTML结构,不一定要缩进。百度的首页,为了减小文件体积,所以都是没有缩进的。提到HTML的作用,只能从语义方面从想,绝对不能想样式。所以C错误的。D正确。

考察常用属性


1  <img src="1.jpg" />
2 <a href="1.html">点击我</a>

imgimage“图像”;

srcsource“资源”;

aanchor“锚”;

hrefhypertext reference“超文本地址”

考察HTTP的原理

服务器上有一些文件,html、图片、cssjs文件,通过HTTP请求传输到了用户的电脑里面。所以,第二次访问的时候,这些图片就不用传输了(Ajax课上,你将知道这是HTTP 304状态),所以页面变得快。

A,错误,没有所谓的vip通路。

B,正确

C,错误。因为HTTP不是一个持久连接的协议,传完就拉倒了,就关闭连接了,

所以没有一个持续的通路。

D,错误。每次访问,都是不同的寻址过程,不会“记路”。

纯文本


用记事本打开,不是乱码,是可读的,那么一定是纯本文文件。只有文本,没有样式,没有语义。所以,.java文件是纯文本的, .class文件不是纯文本的。所有的纯文本文件都能用记事本、notepad++editplussublime编辑。

考察 XHTML


所有的标签名、属性都要小写,必须使用引号,必须封闭。答案是B

考察定义列表


一定要记住每个标签标示什么,就是英语原意是什么?比如
dl 就是definition list 定义列表;
dt 就是definition title,定义标题;
dd就是definition description,定义描述

相对路径与绝对路径


1. html中,有一个能够点击的图片。所以骨架:

<a href=""><img src="" /></a>

href里面是相对路径,要从1.html出发找到2.html

src里面也是相对路径,要从1.html出发找到kaola.png

标准答案:

<a href="../myweb2/2.html" target="_blank"><img src="../../photo/kaola.png" /></a>

我们一直在用的是相对路径,就是从自己出发找到别人。用相对路径的好处很明显,就是站点文件夹可以拷着走。

相对路径的好处:站点不管拷贝到哪里,文件和图片的相对路径关系都是不变的。

相对路径使用有一个前提,就是网页文件和你的图片,必须在一个服务器上。

比如,你现在想插入一个新浪网上的图片,那么就不能用相对路径。就要用绝对路径。

绝对路径非常简单,所有以http://开头的路径,就是绝对路径。

1  <img src="http://i1.sinaimg.cn/dy/deco/2013/0329/logo/LOGO_1x.png" alt="" />
2 <a href="http://www.sohu.com">点击我跳转到搜狐</a> 

老师,我的网页在C盘,图片却在D盘,能不能插入呢?
答案: 用相对路径不能,用绝对路径也不能。
注意,可以使用file://来插入,但是这种方法,没有任何意义!因为服务器上没有所谓c盘、d盘。

下面的方法是行的,但是没有任何工程上的意义,这是因为服务器没有盘符,linux系统没有盘符,

<img src="file://C:\Users\Danny\Pictures\明星\1.jpg" alt="" /> 

总结一下:

我们现在无论是在a标签、img标签,如果要用路径。只有两种路径能用,就是
相对路径和绝对路径。
相对路径,就是../   image/ 这种路径。从自己出发,找到别人;
绝对路径,就是http://开头的路径。
绝对不允许使用file://开头的东西,这个是完全错误的!!

div 是什么?在 div 出现之前做网站用什么布局?

div 是网站布局的盒子标签,div 出现是 table 布局,因为 table 布局嵌套很多,网站加载慢,布局层级不清晰。

标签上title与alt属性的区别是什么?

Alt 当图片不显示是 用文字代表。
Title 为该属性提供信息



H5

什么是H5?

  H5=HTML5,指的是HTML超文本标记语言(HTML)的第五次重大修改,HTML的第五代。 HTML5具有的特点:

  (1)、语义化的标签:好处是网站加载更快;该标签举例:header、nav、article等。

  (2)、增加了音频、视频标签:好处是取代falsh;该标签举例:audio、video。

  (3)、canvas标签:好处在浏览器上绘制图形或动画,取代flash。

  (4)、支持手机和平板的响应式布局。

  HTML5的缺点:低版本浏览器支持性不好,比如IE9以下的浏览器不支持HTML5。

H5为什么这么火?H5是哪一年产生的?H5会火多久?

  (1)、因为H5的后台很硬,是谷歌(google)和苹果(Apple)两大巨头公司,谷歌和苹果大力倡导H5的发展,也是H5的忠实的支持者和实践者(IOS+Android系统占据手机市场92.36%),H5的产生主要目的也是干掉flash,因为flash是adobe公司的,adobe不是W3C组织的成员之一,苹果和谷歌等万维网联盟也不希望在自己的产品中使用加载量过大的flash。

  (2)、H5是2014年9月份W3C(万维网联盟,主要有苹果和谷歌公司)组织发布的。

  (3)、刷脸时代(这里专指网站用户体验更加美观的时代)+移动端时代(手机+平板),会促使H5会在未来的有更加美好的发展前景,只要有网站,H5就会很火,UI也就很火,H5的发展会让UI更加提高用户的满意度,H5的火爆时代,会促进UI更好发展。

  (4)、微信的发展,O2O的促使H5更火。

  在这里不得不谈微信,如果没有微信,或许今天我们不会这样来讨论H5,微信无意中养成了用户扫码的习惯,并通过公众号的内容生.产及分发,以及微信本身已有的庞大的用户群体及社交属性,使基于网页的内容可以快速传播,真正带来了APP即浏览器的时代,取消了输入内容网址的麻烦。以微信为代表的超级社交APP,解决了网页内容浏览及分发的通路。 H5或许会没落,但会迎来H6、H7„,只会变得越来越好,所以没必要担心H5会不会死,当下重在实践与积累,至少现在,Html5的影响力,会超出你我的想象,也就意味着H5的好闺蜜UI会一直火下去。

html5 有哪些新特性

HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
绘画 canvas
用于媒介回放的 video 和 audio 元素
本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;
sessionStorage 的数据在浏览器关闭后自动删除
语意化更好的内容元素,比如 article、footer、header、nav、section
表单控件,calendar、date、time、email、url、search
新的技术 webworker, websocket, Geolocation

什么叫做响应式?

针对不用的屏幕显示不同的网页布局,比如说大屏幕手机、小屏幕手机、平板能够适应不同的屏幕来显示网站。

针对不同屏幕的响应式,UI设计师该做几套设计图?

  只做一套,大多UI设计师会使用iPhone5的尺寸来做一套(640X1136)。那么这种可以适配响应式的各种屏幕的吗?这种在HTML5中通过代码中的媒体查询来实现。媒体查询怎么写?媒体查询的具体写法如下:

 @media screen and (max-width:640px) { //最大宽度是640px的屏幕宽度
    nav li { //nav标签下的li标签设置样式
   display: inline; //转化为行元素
  }
 }

移除了那些元素?

纯表现的元素:basefont,big,center,font, s,strike,tt,u;
对可用性产生负面影响的元素:frame,frameset,noframes;

如何处理 HTML5 新标签的浏览器兼容问题?

  • IE8/IE7/IE6支持通过document.createElement方法产生的标签,
    可以利用这一特性让这些浏览器支持HTML5新标签,

    浏览器支持新标签后,还需要添加标签默认的样式:

  • 当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
    <!--[if lt IE 9]>
    <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
    <![endif]-->

如何区分 HTML 和 HTML5?

DOCTYPE声明\新增的结构元素\功能元素

H5 新增了那些表单类型?

有 8 种:
文本、邮箱、日期、范围、搜索、电话号码、颜色、数字
text、email、date、range、search、tel、color、number

什么是语义化的HTML? 语义化的理解?

直观的认识标签 对于搜索引擎的抓取有好处
用正确的标签做正确的事情!
html语义化就是让页面的内容结构化,便于对浏览器、搜索引擎解析;
在没有样式CCS情况下也以一种文档格式显示,并且是容易阅读的。
搜索引擎的爬虫依赖于标记来确定上下文和各个关键字的权重,利于 SEO。
使阅读源代码的人对网站更容易将网站分块,便于阅读维护理解。

  1.去掉或者丢失样式的时候能够让页面呈现出清晰的结构

  2.有利于SEO:和搜索引擎建立良好沟通,有助于爬虫抓取更多的有效信息:爬虫依赖于标签来确定上下文和各个关键字的权重;

  3.方便其他设备解析(如屏幕阅读器、盲人阅读器、移动设备)以意义的方式来渲染网页;

  4.便于团队开发和维护,语义化更具可读性,是下一步吧网页的重要动向,遵循W3C标准的团队都遵循这个标准,可以减少差异化。

你如何对网站的文件和资源进行优化?期待的解决方案包括:

文件合并
文件最小化/文件压缩
使用CDN托管
缓存的使用

HTML5的离线储存?

localStorage    长期存储数据,浏览器关闭后数据不丢失;
sessionStorage  数据在浏览器关闭后自动删除。

请描述一下 cookies,sessionStorage 和 localStorage 的区别?

  sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有在同一个会话中的页面才能访问并且当会话结束后数据也随之销毁。因此sessionStorage不是一种持久化的本地存储,仅仅是会话级别的存储。而localStorage用于持久化的本地存储,除非主动删除数据,否则数据是永远不会过期的。

  web storage和cookie的区别

  Web Storage的概念和cookie相似,区别是它是为了更大容量存储设计的。Cookie的大小是受限的,并且每次你请求一个新的页面的时候Cookie都会被发送过去,这样无形中浪费了带宽,另外cookie还需要指定作用域,不可以跨域调用。

  除此之外,Web Storage拥有setItem,getItem,removeItem,clear等方法,不像cookie需要前端开发者自己封装setCookie,getCookie。但是Cookie也是不可以或缺的:Cookie的作用是与服务器进行交互,作为HTTP规范的一部分而存在 ,而Web Storage仅仅是为了在本地“存储”数据而生。


cookie在浏览器和服务器间来回传递。 sessionStorage和localStorage不会
sessionStorage和localStorage的存储空间更大;
sessionStorage和localStorage有更多丰富易用的接口;
sessionStorage和localStorage各自独立的存储空间;

HTML5的form如何关闭自动完成功能?

给不想要提示的 form 或下某个input 设置为 autocomplete=off。

如何实现浏览器内多个标签页之间的通信? (阿里)

调用localstorge、cookies等本地存储方式

webSocket如何兼容低浏览器?(阿里)

Adobe Flash Socket 、 ActiveX HTMLFile (IE) 、 基于 multipart 编码发送 XHR 、 基于长轮询的 XHR

iframe有那些缺点?

*iframe会阻塞主页面的Onload事件;

*iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript
动态给iframe添加src属性值,这样可以可以绕开以上两个问题。

CSS 问题

CSS3有哪些新特性?

  CSS3实现圆角(border-radius),阴影(box-shadow),对文字加特效(text-shadow),线性渐变(gradient),旋转(transform)transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);旋转,缩放,定位,倾斜 增加了更多的CSS选择器 多背景 rgba 在CSS3中唯一引入的伪元素是::selection. 媒体查询,多栏布局 border-image

介绍一下CSS的盒子模型?

(1)有两种, IE 盒子模型、标准 W3C 盒子模型;IE的content部分包含了 border 和 pading;

(2)盒模型: 内容(content)、填充(padding)、边界(margin)、 边框(border).

CSS 选择符有哪些?哪些属性可以继承?优先级算法如何计算? CSS3新增伪类有那些?

1.id选择器( # myid)
2.类选择器(.myclassname)
3.标签选择器(div, h1, p)
4.相邻选择器(h1 + p)
5.子选择器(ul > li)
6.后代选择器(li a)
7.通配符选择器( * )
8.属性选择器(a[rel = "external"])
9.伪类选择器(a: hover, li: nth - child)
可继承的样式: font-size font-family color, UL LI DL DD DT;
不可继承的样式:border padding margin width height ;
优先级就近原则,同权重情况下样式定义最近者为准;
载入样式以最后载入的定位为准;

优先级为:

!important >  id > class > tag

important 比 内联优先级高

CSS3新增伪类举例:

p:first-of-type    选择属于其父元素的首个 <p> 元素的每个 <p> 元素。
p:last-of-type    选择属于其父元素的最后 <p> 元素的每个 <p> 元素。
p:only-of-type    选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。
p:only-child    选择属于其父元素的唯一子元素的每个 <p> 元素。
p:nth-child(2)    选择属于其父元素的第二个子元素的每个 <p> 元素。
 :enabled  :disabled 控制表单控件的禁用状态。
:checked        单选框或复选框被选中。

box-sizing常用的属性有哪些?分别有什么作用?

  (Q1)box-sizing: content-box|border-box|inherit;

  (Q2)content-box:宽度和高度分别应用到元素的内容框。在宽度和高度之外绘制元素的内边距和边框(元素默认效果)。

border-box:元素指定的任何内边距和边框都将在已设定的宽度和高度内进行绘制。通过从已设定的宽度和高度分别减去边框和内边距才能得到内容的宽度和高度。

什么是 CSS Hack?

  一般来说是针对不同的浏览器写不同的 CSS,就是 CSS Hack。

  IE 浏览器 Hack 一般又分为三种,条件 Hack、属性级 Hack、选择符 Hack。例如:

// 1、条件Hack
// 2、属性Hack
 .test{
  color:#090\9; /* For IE8+ */
  *color:#f00; /* For IE7 and earlier */
  _color:#ff0; /* For IE6 and earlier */
 }
// 3、选择符Hack
 * html .test{color:#090;} /* For IE6 and earlier */
 * + html .test{color:#ff0;} /* For IE7 */

简述一下 src 与 href 的区别

  href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接。

  src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置;在请求src资源时会将其指向的资源下载并应用到文档内,例如js脚本,img图片和frame等元素。当浏览器解析到该元素时,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等元素也如此,类似于将所指向资源嵌入当前标签内。这也是为什么将js脚本放在底部而不是头部。

CSS 实现垂直水平居中

一道经典的问题,实现方法有很多种,以下是其中一种实现:

// HTML结构: 

// CSS:
.wrapper{position:relative;} .content{
   background-color:#6699FF;
   width:200px;
   height:200px;
   position: absolute; //父元素需要相对定位
   top: 50%;
   left: 50%;
   margin-top:-100px ; //二分之一的height,width
   margin-left: -100px; }

如何居中div?如何居中一个浮动元素?

列出display的值,说明他们的作用。position的值, relative和absolute定位原点是?

1.
block 象块类型元素一样显示。
none 缺省值。象行内元素类型一样显示。
inline-block 象行内元素一样显示,但其内容象块类型元素一样显示。
list-item 象块类型元素一样显示,并添加样式列表标记。

2.
*absolute
      生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

*fixed (老IE不支持)
      生成绝对定位的元素,相对于浏览器窗口进行定位。

*relative
      生成相对定位的元素,相对于其正常位置进行定位。

CSS3有哪些新特性?

  CSS3实现圆角(border-radius:8px),阴影(box-shadow:10px),
对文字加特效(text-shadow、),线性渐变(gradient),旋转(transform)
transform:rotate(9deg) scale(0.85,0.90) translate(0px,-30px) skew(-9deg,0deg);//旋转,缩放,定位,倾斜
增加了更多的CSS选择器  多背景 rgba

一个满屏 品 字布局 如何设计?

经常遇到的CSS的兼容性有哪些?原因,解决方法是什么?

为什么要初始化CSS样式

因为浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面显示差异。

当然,初始化样式会对SEO有一定的影响,但鱼和熊掌不可兼得,但力求影响最小的情况下初始化。
最简单的初始化方法就是: *{padding: 0; margin: 0;} (不建议)

淘宝的样式初始化:
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
h1, h2, h3, h4, h5, h6{ font-size:100%; }
address, cite, dfn, em, var { font-style:normal; }
code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
small{ font-size:12px; }
ul, ol { list-style:none; }
{ text-decoration:none; }
a:hover { text-decoration:underline; }
sup { vertical-align:text-top; }
sub{ vertical-align:text-bottom; }
legend { color:#000; }
fieldset, img { border:0; }
button, input, select, textarea { font-size:100%; }
table { border-collapse:collapse; border-spacing:0; }

absolute的containing block计算方式跟正常流有什么不同?

position:absolute 和 float 属性的异同

  共同点:对内联元素设置`float`和`absolute`属性,可以让元素脱离文档流,并且可以设置其宽高。 不同点:float仍会占据位置,position会覆盖文档流中的其他元素。

position 跟 display、margin collapse、overflow、float 这些特性相互叠加后会怎么样?

对BFC规范的理解?

(W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。)

css定义的权重

以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值:

/*权重为1*/
div{
}
/*权重为10*/
.class1{
}
/*权重为100*/
#id1{
}
/*权重为100+1=101*/
#id1 div{
}
/*权重为10+1=11*/
.class1 div{
}
/*权重为10+10+1=21*/
.class1 .class2 div{
}

如果权重相同,则最后定义的样式会起作用,但是应该避免这种情况出现

解释下浮动和它的工作原理?清除浮动的技巧

        (Q1)

         (1)父级div定义height。

         (2)结尾处加空div标签clear:both。

         (3)父级div定义伪类:after和zoom。

         (4)父级div定义overflow:hidden。

         (5)父级div定义overflow:auto。

         (6)父级div也浮动,需要定义宽度。

         (7)父级div定义display:table。

         (8)结尾处加br标签clear:both。

   (Q2) 比较好的是第3种方式,好多网站都这么用。

用过媒体查询,针对移动端的布局吗?

使用 CSS 预处理器吗?喜欢那个?

如果需要手动写动画,你认为最小时间间隔是多久,为什么?(阿里)

多数显示器默认频率是60Hz,即1秒刷新60次,所以理论上最小间隔为1/60*1000ms = 16.7ms

display:inline-block 什么时候会显示间隙?(携程)

移除空格、使用margin负值、使用font-size:0、letter-spacing、word-spacing

margin 塌陷现象问题

标准文档流中,竖直方向margin不叠加,以较大的为准。

如果不在标准流,比如盒子都浮动了,那么两个盒子之间没有塌陷现象,margin 可以叠加.

标准流:

<div>
<p class="p1"></p>
<p class="p2"></p>
</div>
*{
margin: 0;
padding: 0;
}
div{
width: 200px;
border: 10px solid red;
/*overflow: hidden;*/
}
.p1{
width: 200px;
height: 100px;
background-color: orange;
margin-bottom: 40px;
/*float: left;*/
}
.p2{
width: 200px;
height: 100px;
background-color: orange;
margin-top: 30px;
/*float: left;*/
}


非标准流:

*{
margin: 0;
padding: 0;
}
div{
width: 200px;
border: 10px solid red;
overflow: hidden;
}
.p1{
width: 200px;
height: 100px;
background-color: orange;
margin-bottom: 40px;
float: left;
}
.p2{
width: 200px;
height: 100px;
background-color: orange;
margin-top: 30px;
float: left;
}


权重问题

权重问题大总结:

1 先看有没有选中,如果选中了,那么以(id数,类数,标签数)来计权重。谁大听谁的。如果都一样,听后写的为准。

2 如果没有选中,那么权重是0。如果大家都是0,就近原则。 

1题:



2题:



3题:


4题:



5题:


6题:


7题:红色的。因为cssred写在后面。



8题:

CSS 盒模型

题目1,说出下面盒子真实占有宽高,并画出盒模型图:

1                            div{
2                                        width: 200px;
3                                        height: 200px;
4                                        padding: 10px 20px 30px;
5                                        padding-right: 40px;
6                                        border: 1px solid #000;
7                            }

真实占有宽度 = 200 + 20 + 40 + 1 + 1 = 262px

题目2,说出下面盒子真实占有宽高,并画出盒模型图:

1                            div{

2                                        width: 200px;

3                                        height: 200px;

4                                        padding-left: 10px;

5                                        padding-right: 20px;

6                                        padding:40px 50px 60px;

7                                        padding-bottom: 30px;

8                                        border: 1px solid #000;

9                            }

padding-left:10px padding-right:20px; 没用,因为后面的padding大属性,层叠掉了他们。


强调一点,padding-left 不是padding-left-width

1           padding-left:10px;  

2           padding-left-width:30px; ×

 

3题,我现在给你盒模型图,请写出代码,试着用最最简单的方法写


width:123px;
height:123px;
padding:20px 40px;
border:1px solid red;

 


4题:


width:123px;
height:123px;
padding:20px;
padding-right:40px;
border:1px solid red;

介绍一下box-sizing属性?

   box-sizing 属性主要用来控制元素的盒模型的解析模式。默认值是 content-box。

  content-box:让元素维持W3C的标准盒模型。元素的宽度/高度由border + padding + content的宽度/高度决定,设置width/height属性指的是content部分的宽/高

  border-box:让元素维持IE传统盒模型(IE6以下版本和IE6~7的怪异模式)。设置width/height属性指的是border + padding + content

  标准浏览器下,按照W3C规范对盒模型解析,一旦修改了元素的边框或内距,就会影响元素的盒子尺寸,就不得不重新计算元素的盒子尺寸,从而影响整个页面的布局。

清除浮动的几种方式,各自的优缺点


描述 css reset 的作用和用途

Reset 重置浏览器的 css 默认属性 浏览器的品种不同,样式不同,然后重置,让他们统一

CSS 引入的方式有哪些? link 和 @import 的区别是?

内联 内嵌 外链 导入
区别 :同时加载
前者无兼容性,后者CSS2.1以下浏览器不支持
Link 支持使用javascript改变样式,后者不可
(1)link属于XHTML标签,除了加载CSS外,还能用于定义RSS, 定义rel连接属性等作用;而@import是CSS提供的,只能用于加载CSS;
(2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载;
(3)import是CSS2.1 提出的,只在IE5以上才能被识别,而link是XHTML标签,无兼容问题;
(4)link方式的样式的权重高于@import的权重.

解释css sprites,如何使用

Css 精灵 把一堆小的图片整合到一张大的图片上,减轻服务器对图片的请求数量

  CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。这样可以减少很多图片请求的开销,因为请求耗时比较长;请求虽然可以并发,但是也有限制,一般浏览器都是6个。对于未来而言,就不需要这样做了,因为有了http2。

如何让一个盒子居中显示


对BFC规范的理解?

  BFC,块级格式化上下文,一个创建了新的BFC的盒子是独立布局的,盒子里面的子元素的样式不会影响到外面的元素。在同一个BFC中的两个毗邻的块级盒在垂直方向(和布局方向有关系)的margin会发生折叠。(W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行布局,以及与其他元素的关系和相互作用.)

CSS 定位

绝对定位面试题:

答案:

绝对定位的参考点:(不存在已定位的父辈盒子

如果用top描述,那么定位参考点就是页面的左上角,而不是浏览器的左上角;

如果用bottom描述,那么就是浏览器首屏窗口尺寸,对应的页面的左下角。



JS 问题

介绍js的基本数据类型。

number,string,boolean,object,undefined

js有哪些内置对象?

      数据封装类对象:Object、Array、Boolean、Number 和 String

  其他对象:Function、Arguments、Math、Date、RegExp、Error

this对象的理解 

      this总是指向函数的直接调用者(而非间接调用者);

  如果有new关键字,this指向new出来的那个对象;

  在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent中的this总是指向全局对象Window。

Javascript如何实现继承?

通过原型和构造器

["1", "2", "3"].map(parseInt) 答案是多少?

[1, NaN, NaN] 因为 parseInt 需要两个参数 (val, radix),其中 radix 表示解析时用的基数。map 传了 3 个 (element, index, array),对应的 radix 不合法导致解析失败。

如何创建一个对象? (画出此对象的内存图)

function Person(name, age) {
  this.name = name;
  this.age = age;
  this.sing = function() { alert(this.name) }
}

谈谈This对象的理解。

this是js的一个关键字,随着函数使用场合不同,this的值会发生变化。

但是有一个总原则,那就是this指的是调用函数的那个对象。

this一般情况下:是全局对象Global。 作为方法调用,那么this就是指这个对象

JavaScript原型,原型链 ? 有什么特点?

事件是?IE与火狐的事件机制有什么区别? 如何阻止冒泡?

  1. 我们在网页中的某个操作(有的操作对应多个事件)。例如:当我们点击一个按钮就会产生一个事件。是可以被 JavaScript 侦测到的行为。

  2. 事件处理机制:IE是事件冒泡、火狐是 事件捕获;

  3. ev.stopPropagation();

什么是闭包(closure),为什么要用它?

执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在.使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源,因为say667()的内部函数的执行需要依赖say667()中的变量。这是对闭包作用的非常直白的描述.

  function say667() {
    // Local variable that ends up within closure
    var num = 666;
    var sayAlert = function() { alert(num); }
    num++;
    return sayAlert;
}

 var sayAlert = say667();
 sayAlert()//执行结果应该弹出的667

"use strict";是什么意思 ? 使用它的好处和坏处分别是什么?


如何判断一个对象是否属于某个类?

使用instanceof (待完善)

if(a instanceof Person){
    alert('yes');
}

new操作符具体干了什么呢?

     1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
     2、属性和方法被加入到 this 引用的对象中。
     3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。

var obj  = {};
obj.__proto__ = Base.prototype;
Base.call(obj);

Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

hasOwnProperty

JSON 的了解?

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小。
{"age":"12", "name":"back"}

js延迟加载的方式有哪些?

defer和async、动态创建DOM方式(用得最多)、按需异步载入js

说几条写JavaScript的基本规范?

1.不要在同一行声明多个变量。
2.请使用 ===/!==来比较true/false或者数值
3.使用对象字面量替代new Array这种形式
4.不要使用全局函数。
5.Switch语句必须带有default分支
6.函数不应该有时候有返回值,有时候没有返回值。
7.For循环必须使用大括号
8.If语句必须使用大括号
9.for-in循环中的变量 应该使用var关键字明确限定作用域,从而避免作用域污染。

ajax 是什么?

jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面

模块化怎么做?

[ 立即执行函数](http://benalman.com/news/2010/11/immediately-invoked-function-expression/),不暴露私有成员

       var module1 = (function(){
           var _count = 0;
           var m1 = function(){
             //...
           };
           var m2 = function(){
             //...
           };
           return {
             m1 : m1,
             m2 : m2
           };
         })();

AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)规范区别?


异步加载的方式有哪些?

(1) defer,只支持IE

(2) async:

(3) 创建script,插入到DOM中,加载完毕后callBack

同步和异步的区别?

如何解决跨域问题?


documen.write和 innerHTML的区别

document.write只能重绘整个页面

innerHTML可以重绘页面的一部分

.call() 和 .apply() 的区别?

例子中用 add 来替换 sub,add.call(sub,3,1) == add(3,1) ,所以运行结果为:alert(4);

注意:js 中的函数其实是对象,函数名是对 Function 对象的引用。

  function add(a,b)
  {
      alert(a+b);
  }

  function sub(a,b)
  {
      alert(a-b);
  }

  add.call(sub,3,1);

Jquery与jQuery UI 有啥区别?

*jQuery是一个js库,主要提供的功能是选择器,属性修改和事件绑定等等。

*jQuery UI则是在jQuery的基础上,利用jQuery的扩展性,设计的插件。
 提供了一些常用的界面元素,诸如对话框、拖动行为、改变大小行为等等

JQuery的源码看过吗?能不能简单说一下它的实现原理?

jquery 中如何将数组转化为json字符串,然后再转化回来?

jQuery中没有提供这个功能,所以你需要先编写两个jQuery的扩展:

$.fn.stringifyArray = function(array) {
    return JSON.stringify(array)
}

$.fn.parseArray = function(array) {
    return JSON.parse(array)
}

然后调用:
$("").stringifyArray(array)

针对 jQuery 的优化方法?

*基于Class的选择性的性能相对于Id选择器开销很大,因为需遍历所有DOM元素。

*频繁操作的DOM,先缓存起来再操作。用Jquery的链式调用更好。
 比如:var str=$("a").attr("href");

*for (var i = size; i < arr.length; i++) {}
 for 循环每一次循环都查找了数组 (arr) 的.length 属性,在开始循环的时候设置一个变量来存储这个数字,可以让循环跑得更快:
 for (var i = size, length = arr.length; i < length; i++) {}

JavaScript中的作用域与变量声明提升?

如何编写高性能的Javascript?


那些操作会造成内存泄漏?

内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。
垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。

setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。
闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

JQuery一个对象可以同时绑定多个事件,这是如何实现的?


如何判断当前脚本运行在浏览器还是node环境中?(阿里)

通过判断Global对象是否为window,如果不为window,当前脚本没有运行在浏览器中

eval是做什么的?

它的功能是把对应的字符串解析成JS代码并运行;
应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。
由JSON字符串转换为JSON对象的时候可以用eval,var obj =eval('('+ str +')')。

null,undefined 的区别?

  null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。

  undefined:

  (1)变量被声明了,但没有赋值时,就等于undefined。

  (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

  (3)对象没有赋值的属性,该属性的值为undefined。

  (4)函数没有返回值时,默认返回undefined。

  null:

  (1) 作为函数的参数,表示该函数的参数不是对象。

  (2) 作为对象原型链的终点。

写一个通用的事件侦听器函数。

// event(事件)工具集,来源:github.com/markyun
markyun.Event = {
    // 页面加载完成后
    readyEvent : function(fn) {
        if (fn==null) {
            fn=document;
        }
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = fn;
        } else {
            window.onload = function() {
                oldonload();
                fn();
            };
        }
    },
    // 视能力分别使用dom0||dom2||IE方式 来绑定事件
    // 参数: 操作的元素,事件名称 ,事件处理程序
    addEvent : function(element, type, handler) {
        if (element.addEventListener) {
            //事件类型、需要执行的函数、是否捕捉
            element.addEventListener(type, handler, false);
        } else if (element.attachEvent) {
            element.attachEvent('on' + type, function() {
                handler.call(element);
            });
        } else {
            element['on' + type] = handler;
        }
    },
    // 移除事件
    removeEvent : function(element, type, handler) {
        if (element.removeEventListener) {
            element.removeEventListener(type, handler, false);
        } else if (element.datachEvent) {
            element.detachEvent('on' + type, handler);
        } else {
            element['on' + type] = null;
        }
    },
    // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)
    stopPropagation : function(ev) {
        if (ev.stopPropagation) {
            ev.stopPropagation();
        } else {
            ev.cancelBubble = true;
        }
    },
    // 取消事件的默认行为
    preventDefault : function(event) {
        if (event.preventDefault) {
            event.preventDefault();
        } else {
            event.returnValue = false;
        }
    },
    // 获取事件目标
    getTarget : function(event) {
        return event.target || event.srcElement;
    },
    // 获取event对象的引用,取到事件的所有信息,确保随时能使用event;
    getEvent : function(e) {
        var ev = e || window.event;
        if (!ev) {
            var c = this.getEvent.caller;
            while (c) {
                ev = c.arguments[0];
                if (ev && Event == ev.constructor) {
                    break;
                }
                c = c.caller;
            }
        }
        return ev;
    }
};

JS 的同源策略

一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合

定时器注意问题

alert(1);
setTimeout("alert(2)",0);
alert(3);
代码执行的结果依次为 1,3,2

var num = 10;
alert(num);
num = 20;
setTimeout("alert(num)",0);
num = 30;
alert(num);
代码执行的结果依次为 10,30,30

var num = 10;
alert(num);
num = 20;
setTimeout("alert(num)",0);
for (var i=0;i<1000;i++){console.log(i)}
num = 30;
代码执行的结果依次为 10,30



运算符问题

算数运算符


源代码:
var a=10,b=20,c=30;
a++;
++a;
var e=++a+(++b)+(c++)+a++;
alert(e);
结果:77

源代码:
var a=10,b=20,c=30;
a++;
++a;
var e=++a+(++b)+(c++)+(a++);
alert(e);
结果:77

逻辑运算符

console.log("a&&b a为假,则返回aa为真,则返回b");
var a = 0&&1;
console.log(a); // 0
var b = 1&&0;
console.log(b); // 0
var c = 1&&10;
console.log(c); // 10
var d = 1 && 2 && 3;
console.log(d); // 3
var e = 0 && 1 && 2;
console.log(e); // 0
var f = 1 && 0 && 2;
console.log(f); // 0
console.log("===============");

console.log("a||b a为假,则返回ba为真,则返回a ");
console.log(0||1); // 1
console.log(1||0); // 1
console.log(1||5); // 1
console.log(5||1); // 5
var g = 0 || 1 || 2;
console.log(g); // 1
var h = 1 || 0 || 3;
console.log(h); // 1
console.log("===============");

console.log("&& 的运算级别 比 || 高:");
var i = 3 && 0 || 2;
console.log(i); // 2
var j = 3 || 0 && 2;
console.log(j); // 3
var k = 0 || 2 && 3;
console.log(k); // 3

call 和 apply 的区别

  apply()函数有两个参数:第一个参数是上下文,第二个参数是参数组成的数组。如果上下文是null,则使用全局对象代替。

  如:function.apply(this,[1,2,3]);

  call()的第一个参数是上下文,后续是实例传入的参数序列。

  如:function.call(this,1,2,3);

事件委托是什么

让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!

闭包的理解

  使用闭包主要是为了设计私有的方法和变量。闭包的优点是可以避免全局变量的污染,缺点是闭包会常驻内存,会增大内存使用量,使用不当很容易造成内存泄露。

  闭包三个特性: 1.函数嵌套函数 ; 2.函数内部可以引用外部的参数和变量 ; 3.参数和变量不会被垃圾回收机制回收

闭包是什么,有什么特性,对页面有什么影响

解释jsonp的原理,以及为什么不是真正的ajax

动态创建script标签,回调函数
Ajax是页面无刷新请求数据操作

编写一个在一组数据中求最大值的函数




编写一个数组去重的方法


函数声明提升和变量声明提升问题

1. 下图中输出的结果是?



答案:9, 9, 9, 9, 9, 报错(Uncaught ReferenceError: a is not defined)本题考查函数声明提升和变量申明提升
关键点函数执行时,函数内部的变量优先级高于函数外部的变量函数内部变量声明提升:只提升变量的申明,不提升变量的值var a=b=c=9; 不等于 var a=9, b=9, c=9;函数若未经调用,则函数内部定义的全局变量不能被外部访问函数体内部用 var 声明的变量,不管函数调用与否,函数体外部都不能访问未声明就被赋值的变量为全局变量


解析
函数 f1 是一个全局函数,会被提升到代码顶部;
函数 f1 中的 var a=b=c=9; 
相当于var a = 9; // 局部变量,函数 f1 调用时才会被提升到 函数内部代码顶部
b=9; // 全局变量,函数调用时才会被读取
c=9; // 全局变量,函数调用时才会被读取

var a = 9, b = 9, c = 9; 相当于var a = 9;var b = 9;var c = 9;
故图中的代码执行顺序依次是:先执行函数 f1,控制台依次输出 9,9,9
执行完函数 f1 后,该函数体内部声明的全局变量 b=9 , c=9 被暴露,可以被外部访问,而函数体内用 var 声明的局部变量不能被函数体外部访问再依次执行 console.log(c),console.log(b),console.log(a),依次输出9,9,报错(Uncaught ReferenceError: a is not defined)


原代码

f1();
console.log(c);
console.log(b);
console.log(a);

function f1() {
var a=b=c=9;
console.log(a);
console.log(b);
console.log(c);
}

结果



原代码

console.log(c);
console.log(b);
console.log(a);
f1();

function f1() {
var a=b=c=9;
console.log(a);
console.log(b);
console.log(c);
}

结果


原代码

f1();
console.log(c);
console.log(b);
console.log(a);

function f1() {
var a=9,b=9,c=9;
console.log(a);
console.log(b);
console.log(c);
}

结果


原代码
console.log(c);
console.log(b);
console.log(a);
f1();

function f1() {
var a=9,b=9,c=9;
console.log(a);
console.log(b);
console.log(c);
}

结果





2. 下图中输出的结果是?


答案:undefined考查变量的优先级
关键点函数执行时,函数内部的变量优先级高于函数外部的变量函数变量申明提升:只提升变量的申明,不提升变量的值
解析
该段代码中全局变量有:num = 10                   
全局函数有:fun()在函数 fun() 中重新申明了变量 num = 20,但不在函数内部代码的头部,需要进行变量申明提升,即此时 var num; ,没有值的变量,默认值为 undefined,故调用函数的结果为 undefined

源代码

var num = 10;
fun();

function fun() {
console.log(num);
var num = 20;
}

结果:undefined
源代码

var num = 10;
fun();

function fun() {
console.log(num);
}

结果:10
源代码

var num = 10;
fun();

function fun() {
var num = 20;
console.log(num);
}

结果:20



3.下图中输出结果是?


答案:undefined,9
源代码

var a=18;
f1();
function f1() {
var b=9;
console.log(a);
console.log(b);
var a='123';
}

结果




函数相关问题

将一个变量放在外面和放在函数中的区别

将一个变量放在外面,一般称之为全局变量:当前页面内有效
将一个变量放在一个函数中,一般称之为局部变量:只在函数内有效

”==”和“===”的不同

==表示相等:只要值相等就可以了,数据类型不一定相等(会自动做类型转换)
===表示全等于:比较的时候必须值和数据类型都相等才相等(不会自动做类型转换)

函数有什么用?


知道函数其实就是一个工具,我们只需要学会使用工具就可以实现某个功能
这就是封装性
什么是函数:函数就是拥有单一功能的小机器

总结:
我们学习JS其实就是学习JS中已经封装好的各种工具而已。
只需要学会如何使用就可以了,不需要知道函数内部的构造
就像电脑,我们无须关心电脑如何制造的,只需要学会使用就可以了,其实我们学习js就是在学习里面的一个一个小工具是如何使用的

这就是传说中的封装性

简单说下你对函数的了解

答案:我不会说,我只会用
函数有名称,参数,这样回答等于没说,那怎么说呢?

简单说下你对面向对象的理解

简单说下你对原型链的理解

简述你对JS中继承的理解

网站优化

你如何对网站的文件和资源进行优化?期待的解决方案包括:

  文件合并

  文件最小化/文件压缩

  使用CDN托管

  缓存的使用

网络通信 -- http

GET和POST的区别?

  form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:

  ① Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据;

  ② Get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL;

  ③ Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的;

  ④ Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post;

  ⑤ Get限制form表单的数据集必须为ASCII字符,而Post支持整个ISO10646字符集;

  ⑥ Get是from的默认方法。

HTTP状态码知道哪些?

  100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息

  200 OK 正常返回信息

  201 Created 请求成功并且服务器创建了新的资源

  202 Accepted 服务器已接受请求,但尚未处理

  301 Moved Permanently 请求的网页已永久移动到新位置。

  302 Found 临时性重定向。

  303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。

  304 Not Modified 自从上次请求后,请求的网页未修改过。

  400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。

  401 Unauthorized 请求未授权。

  403 Forbidden 禁止访问。

  404 Not Found 找不到如何与 URI 相匹配的资源。

  500 Internal Server Error 最常见的服务器端错误。

  503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

数据传送

XML和JSON的区别?

  1.数据体积方面。JSON相对于XML来讲,数据的体积小,传递的速度更快些。

  2.数据交互方面。JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。

  3.数据描述方面。JSON对数据的描述性比XML较差。

  4.传输速度方面。JSON的速度要远远快于XML。


JS 字面量和 JS 对象的关系

JS 解析器在执行到 JS 字面量的代码时,会在内部自动将字面量转换为相应 JS 对象的实例,这就是我们在使用 JS 字面量时可以调用某些方法的原因。

我们自己定义的函数和其他字面量数据类型一样,在被调用之前或调用时,也会自动转换为 Function 对象的一个实例,所以拥有 FUnction 对象的所有属性和方法。

注意:浏览器不同,解析的过程也可能不同(如有的是立即转换,有的是当调用有关的方法或属性时再执行转换),但最终的效果都是一致的。

JS 对象字面量、JSON 对象、JSON 字符串、JSON 协议、XML 协议

如果一个网站或应用的数据量小,可以考虑用 .txt 或.json 文件充当数据库来实现优化

比较 json 对象 和 json 协议
比较 json 对象 和 JS 对象字面量
了解数据是如何传输的
了解序列化和反序列化
什么是 JSON 协议
JSON 字符串和 JSON 对象的区别
XML 协议和 JSON 协议的优缺点比较

JS 对象字面量
是 JS 对象的一种简化写法,是对象的一个实例,使用时无需实例化。

JSON 对象
JSON 全称为 JavaScript 对象表示法(JavaScript Object Notation),用来描述数据结构和存储数据。语法类似 JavaScript 的对象字面量。

JSON 字符串

JSON 协议

JS 对象字面量和 JSON 对象区别

对象字面量表示法和 JavaScript Object Notation(JSON)是不同的。虽然他们看起来相似,不同点有:

  • JSON 只允许"property": value syntax形式的属性定义。属性名必须用双引号括起来。且属性定义不允许使用简便写法。
  • JSON中,属性的值仅允许字符串,数字,数组,truefalsenull或其他(JSON)对象。 
  • JSON中,不允许将值设置为函数。
  •  Date 等对象,经JSON.parse()处理后,会变成字符串。
  • JSON.parse() 不会处理计算的属性名,会当做错误抛出。
JS 对象
var objectLiteral = {
  name: "Objector.L",
  age: "24",
  special: "JavaScript",
  sayName: function() {
    return this.name;
  }
};
JSON 对象
var jsonFormat = {
  "summary": "Blogs",
  "blogrolls": [
    {
       "title": "Explore JavaScript",
       "link": "http://example.com/"
    },
    { 
       "title": "Explore JavaScript",
       "link": "http://example.com/"
    }
  ]
};
JS 对象字面量和 JSON 对象区别的理论知识
JSON 对象虽然语法规则要求加个””,但是在 JavaScript 中其实不加也是正确的。

由于js语法不是很严谨,以后我们不用过于纠结这些小细节
以后在 JavaScript 环境中可以统一将 JSON 对象,对象的字面量形式看成是一回事

对象字面量的好处
可以减少中间变量,使代码的结构更加清晰,也更加直观。
而不必通过类来进行实例化,大大的提高了编码的效率。

什么是协议
USB接口是一个协议,只要大家按照这个协议生产USB优盘,鼠标,键盘,就可以被电脑识别

同样的,JSON 也是一个协议,只要我们将数据转换成这个格式,就能实现传输,至于如何传输的,这属于网络学科的范畴







JSON 协议
JSON 协议是数据传输通用协议
JSON 协议事实上已经作为一种前端与服务器端的数据交换格式,是一种国际标准。他不是语言,他只是一个规范,按照这种规范写法就能实现数据传递。

JSON 字符串和 JSON 对象的区别
ajax,后台一般传递给我们的数据格式是 JSON 字符串,我们拿到数据之后,将其转化成 JSON 对象,才能做其他处理
将 JSON 对象转化成 JSON 字符串:
JSON.stringify(obj) // 将JSON转为字符串

将 JSON 字符串转化成 JSON 对象:
通过eval() 函数可以将JSON字符串转化为对象
JSON.parse(string) // 将字符串转为JSON对象

XML 协议 和 JSON 协议

面试题目:
什么是XML,XML作用,和 JSON 的区别

什么是XML
XML只是描述数据的一种结构,比如大家常用的HTML就是采用这种结构描述的。
HTML就是一种XML结构

JSON 是一种网络通用协议
但更为通用是的 XML 协议


为什么需要学习 XML
XML 就类似C、C++语言,虽然有更优秀的 java 语言,但是目前业界排行榜依旧是C、C++(java是C++演变而来)
因为这些是核心,是不变的东西,
而 JSON 是基于 XML 演化而来的,以后会被另一个取代,但是 XML 作为所有一切的灵魂人物是不会变化的
关键不是学会这个技术,而是学会自学能力,以后可能会出现一种新的 JSON,你很快就能学会
还有HTML Android IOS widows8 前端界面全是 XML
如果从整个互联网来看 XML 占据80% JSON 20%
单从 JS 来看: JSON:55% XML 45%

XML作用
树结构存储数据
文本数据库
统一通信协议
不同平台之间通讯

零基础只需要记住三个字: 树结构

XML的重要性之最 – 统一通信协议
不同语言,不同系统,不同设备之间共同的语言 – XML,就类似世界通用语言英语
重要性是世界级别的。。。
互联网发展速度很快,起初诞生了很多语言,之后出现了用不同语言开发的各种系统,刚开始这些语言,系统之间无法沟通。
后来W3C标准组织规定了一种语言XML作为互联网世界通用语言,,任何系统要和其他系统沟通就必须先转换成xml,发给另一个系统

XML 作用之最 – 描述整个互联网世界
XML 的重要性:
互联网世界皆 XML
HTML 是XML(大家只需要知道HTML是XML的一种结构即可)
Android手机开发前端XML
IOS手机开发前端XML
JSON – 特殊的XML
Web service服务
Restful 服务
云计算

前后台沟通的桥梁:XML 和 JSON
既可以用json 也可以用xml
Web前端开发 json更流行

XML 树结构
第一行是 XML 声明
它定义 XML 的版本 (1.0) 和所使用的编码(ISO-8859-1 = Latin-1/西欧字符集)。
根元素
下一行描述文档的根元素(像在说:“本文档是一个便签”):<note>
子元素
接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body):
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
根元素结尾
最后一行定义根元素的结尾:

XML 语法规则
所有 XML 元素都须有关闭标签
XML 标签对大小写敏感
XML 必须正确地嵌套
XML 文档必须有根元素
XML 的属性值须加引号

XML 和 JSON 的区别

相同点:
都是一种通用协议
都可以用来描述数据

不同点:
JSON相对于XML来讲,数据的体积小,传递的速度更快些。
XML 专用带宽大,JSON 占用带宽小
JSON 没有 XML 这么通用
JSON 可以和js对象互相转换,和 JS 是天生的一对,因此广泛用于前端开发
XML已经被业界广泛的使用,而 JSON 才刚刚开始,但是在 AJAX 这个特定的领域,未来的发展一定是XML让位于JSON。到时 AJAX应该变成AJAJ(Asynchronous Javascript and JSON) 

node.js

node.js 的适用场景? 

高并发、聊天、实时消息推送


其他

做一个网页设计师或者前端工程师,平常访问学习的IT网站都有哪些?

  • W3Cschool
  • segmentFault
  • csdn
  • 知乎论坛
  • 博客园
  • github
  • 慕课网
  • 中国慕课网

切图工程师、前端工程师、UI设计师、美工、网页设计师区别是什么?

  (1)、UI设计师俗称美工,不过UI设计师工作高端、名字大气、工资上档次,不过大多公司都称呼UI为美工,你也不要介意的,不管他们怎么称呼的,反正就是做网站设计图的就OK,别人怎么称呼不重要的了,只要你拿了高工资就是UI设计师了。

  UI的主要任务是设计。了解用户的意图,分析网站配色,基本布局。绘制出一个网站效果图。 UI需要掌握的知识体系应该包括网页设计,UI(User Interface)用户界面人机交互、操作逻辑、界面美观的整体设计,UED(user experience design)用户体验设计–简单来说就是如何使得网站更加便于交互。

  (2)、前端开发:

  美工在完成设计效果图之后,由前端开发人员将其制作成为适合浏览器查看的HTML页面。 由于现在移动互联网的大规模流行,加上各个不同厂商的浏览器的激烈竞争,前端开发的主要任务简单来说就是使网页在不同浏览器不同分辨率不同设备上提供相似或相近的浏览体验。

  前端开发需要掌握的知识体系主要是兼容性问题的解决,流畅完美的交互体验。具体到技术细节上就是HTML,CSS,JavaScript,各大公司各种不同内核的浏览器、各种各样的JS库、简单的与后台交互的知识。

  (3)、后台开发:

  前台开发完成之后,就是后台程序员的工作了,相比较前端来说,后台更像传统意义上的程序员。后台的工作简单来说就是网页文件对数据库的增删改查。

  后台需要掌握的知识体系应该包括,编程基础,基本HTML语言,至少一门主流网页语言(C#,C++,JAVA,PHP等),数据库的操作等等。

  (4)、 UI设计师和网页设计师有什么区别?

  其实网页设计,分出来有两块,一个是UI设计,一个是web前端。UI设计自然要懂的更多的是PS,FW,AI,CD等制图软件,还有一些比较优秀的网页设计理念,切图等相关知识。

  web前端,需要的html+css+javascript,通过这三个东西把设计图转换成代码。这一步所实现的就是设计图的静态化,也就是变成了网页形式。

  网页设计师,是个很泛的概念,不过一般指的会偏重UI设计。稍微关注过网页设计领域的公司,有点规模的,招人都会写得比较详细,例如招UI设计师,或者招web前端工程师。 你找工作的时候,都找这些名称比较规范的,因为起码他们会区别职位的不同。一定要找的时候看清楚是UI设计师,不是找前端或者美工的,前端更多的写较高级的代码的,会比设计懂的知识点更多的,美工其实就是淘宝装修店铺或者说简单的PS照片的,就是会玩美图秀秀或者PS简单的绘图就可以的了,UI设计师才是咱们的IT行业“高大上”职位。

  (5)、UI设计师:

  “UI”的本义是用户界面,是英文User和interface的缩写。UI设计师简称UID(User Interface Designer),指从事对软件的人机交互、操作逻辑、界面美观的整体设计工作的人。

  UI设计师的涉及范围包括商用平面设计、高级网页设计、移动应用界面设计及部分包装设计,是目前中国信息产业中最为抢手的人才之一。

  UI设计师的特点是:工资高、发展前景好,会一些简单的前端知识代码,做手机端和PC端的网站设计图。

  2、UI设计师的工作内容是什么?

  (1)、负责软件界面的美术设计、创意工作和制作工作;

  (2)、根据各种相关软件的用户群,提出构思新颖、有高度吸引力的创意设计;

  (3)、对页面进行优化,使用户操作更趋于人性化;

  (4)、维护现有的应用产品;

  (5)、收集和分析用户对于GUI的需求。

  3、UI设计师需要会使用的工具的简称都有哪些?

  以下一些工具的简称,大家应该有一定的了解,以免被问到咱们只知道简称。

  (1)、AI (adobe illustrator)基于矢量的图形制作软件

  (2)、PS(adobe Photoshop)图像处理软件。

  (3)、DW(Adobe Dreamweaver)网页编辑器

  (4)、AE(Adobe After Effects)一款图形视频处理软件

  (5)、flash(Adobe Flash)二维动画软件

  (6)、Axure(Axure RP)快速原型设计工具

  (7)、墨刀(MockingBot)移动端原型工具

  (8)、Fireworks网页作图软件

什么是前端工程师?什么是后端工程师?

  前端工程师就是指的做静态网页的工程师:

  (1)、广义的前端分为三种:安卓工程师、ios工程师、web前端工程师。

  (2)、狭义的前端指的是web前端工程师,web前端工程师指的是做静态的PC端和手机端静态网页的工程师。

什么是静态网页?什么叫做动态网页?

  (1)、静态网页:没有数据交互的网页,没有数据库参与,没有服务器端数据的加载。比如静态网页就是只有html+css+JavaScript做成的网站。

  (2)、动态网页:有后台数据参与的网页,网页中的数据是从数据库取的,需要有后台逻辑的支持。比如动态网页就是jsp页面(后台语言是java)、asp页面(后台语言是asp.net)。

前端语言有哪些?后端语言有哪些?

  (1)、前端语言:HTML、css、javascript。

  (2)、后端语言(服务器端语言):php、java、asp.net。最近新出的node.js

做一个网站的团队都需要哪些人?

  (1)、产品经理:设计这个产品,通常就是了解用户的网站需求,画原型图。

  (2)、项目经理:通常是对整个产品有一个整理管理和负责,通常是会代码技术的人来构建整个网站的代码框架,以后网站实现的全面管理。

  (3)、UI设计师,通过原型图画psd设计图的。

  (4)、前端工程师,根据设计图来做静态网页,可能是原生app的IOS和安卓工程师,或者web端的web前端工程师。

  (5)、后端工程师,通常就是做java、asp.net、php的工程师来写后端逻辑的工程师。

简述同步和异步的区别

  同步是阻塞模式,异步是非阻塞模式。

  同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;

  异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。

线程与进程的区别

  一个程序至少有一个进程,一个进程至少有一个线程。

  线程的划分尺度小于进程,使得多线程程序的并发性高。

  另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

  线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

  从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。

你遇到过比较难的技术问题是?你是如何解决的?

常使用的库有哪些?常用的前端开发工具?开发过什么应用或组件?

页面重构怎么操作?

列举IE 与其他浏览器不一样的特性?

哪些常见操作会造成内存泄漏?

  内存泄漏指任何对象在您不再拥有或需要它之后仍然存在。

  垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量。如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环的,那么该对象的内存即可回收。

  setTimeout 的第一个参数使用字符串而非函数的话,会引发内存泄漏。

  闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)。

99%的网站都需要被重构是那本书上写的?

什么叫优雅降级和渐进增强?

  渐进增强 progressive enhancement:

  针对低版本浏览器进行构建页面,保证最基本的功能,然后再针对高级浏览器进行效果、交互等改进和追加功能达到更好的用户体验。

  优雅降级 graceful degradation:

  一开始就构建完整的功能,然后再针对低版本浏览器进行兼容。

  区别:

  a. 优雅降级是从复杂的现状开始,并试图减少用户体验的供给

  b. 渐进增强则是从一个非常基础的,能够起作用的版本开始,并不断扩充,以适应未来环境的需要

  c. 降级(功能衰减)意味着往回看;而渐进增强则意味着朝前看,同时保证其根基处于安全地带


  优雅降级:Web站点在所有新式浏览器中都能正常工作,如果用户使用的是老式浏览器,则代码会检查以确认它们是否能正常工作。由于IE独特的盒模型布局问题,针对不同版本的IE的hack实践过优雅降级了,为那些无法支持功能的浏览器增加候选方案,使之在旧式浏览器上以某种形式降级体验却不至于完全失效。

  渐进增强:从被所有浏览器支持的基本功能开始,逐步地添加那些只有新式浏览器才支持的功能,向页面增加无害于基础浏览器的额外样式和功能的。当浏览器支持时,它们会自动地呈现出来并发挥作用。

WEB应用从服务器主动推送Data到客户端有那些方式?

对Node的优点和缺点提出了自己的看法?

*(优点)因为Node是基于事件驱动和无阻塞的,所以非常适合处理并发请求,
  因此构建在Node上的代理服务器相比其他技术实现(如Ruby)的服务器表现要好得多。
  此外,与Node代理服务器交互的客户端代码是由javascript语言编写的,
  因此客户端和服务器端都用同一种语言编写,这是非常美妙的事情。

*(缺点)Node是一个相对新的开源项目,所以不太稳定,它总是一直在变,
  而且缺少足够多的第三方库支持。看起来,就像是Ruby/Rails当年的样子。

你有哪些性能优化的方法?

(看雅虎14条性能优化原则)。

 (1) 减少http请求次数:CSS Sprites, JS、CSS源码压缩、图片大小控制合适;网页Gzip,CDN托管,data缓存 ,图片服务器。

 (2) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数

 (3) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能。

 (4) 当需要设置的样式很多时设置className而不是直接操作style。

 (5) 少用全局变量、缓存DOM节点查找的结果。减少IO读取操作。

 (6) 避免使用CSS Expression(css表达式)又称Dynamic properties(动态属性)。

 (7) 图片预加载,将样式表放在顶部,将脚本放在底部  加上时间戳。

 (8) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢。
 对普通的网站有一个统一的思路,就是尽量向前端优化、减少数据库操作、减少磁盘IO。向前端优化指的是,在不影响功能和体验的情况下,能在浏览器执行的不要在服务端执行,能在缓存服务器上直接返回的不要到应用服务器,程序能直接取得的结果不要到外部取得,本机内能取得的数据不要到远程取,内存能取到的不要到磁盘取,缓存中有的不要去数据库查询。减少数据库操作指减少更新次数、缓存结果减少查询次数、将数据库执行的操作尽可能的让你的程序完成(例如join查询),减少磁盘IO指尽量不使用文件系统作为缓存、减少读写文件次数等。程序优化永远要优化慢的部分,换语言是无法“优化”的。

http状态码有那些?分别代表是什么意思?

100-199 用于指定客户端应相应的某些动作。
200-299 用于表示请求成功。
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。
400-499 用于指出客户端的错误。400    1、语义有误,当前请求无法被服务器理解。401    当前请求需要用户验证 403    服务器已经理解请求,但是拒绝执行它。
500-599 用于支持服务器错误。 503 – 服务不可用

一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?(流程说的越详细越好)

查找浏览器缓存
DNS解析、查找该域名对应的IP地址、重定向(301)、发出第二个GET请求
进行HTTP协议会话
客户端发送报头(请求报头)
服务器回馈报头(响应报头)
html文档开始下载
文档树建立,根据标记请求所需指定MIME类型的文件
文件显示
[
浏览器这边做的工作大致分为以下几步:

加载:根据请求的URL进行域名解析,向服务器发起请求,接收文件(HTML、JS、CSS、图象等)。

解析:对加载到的资源(HTML、JS、CSS等)进行语法解析,建议相应的内部数据结构(比如HTML的DOM树,JS的(对象)属性表,CSS的样式规则等等)
}

除了前端以外还了解什么其它技术么?你最最厉害的技能是什么?

你常用的开发工具是什么,为什么?

对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?

 前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。
1、实现界面交互
2、提升用户体验
3、有了Node.js,前端可以实现服务端的一些事情
前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,

 参与项目,快速高质量完成实现效果图,精确到1px;

 与团队成员,UI设计,产品经理的沟通;

 做好的页面结构,页面重构和用户体验;

 处理hack,兼容、写出优美的代码格式;

 针对服务器的优化、拥抱最新前端技术。

加班的看法?

加班就像借钱,原则应当是------救急不救穷

平时如何管理你的项目?

先期团队必须确定好全局样式(globe.css),编码模式(utf-8) 等;

编写习惯必须一致(例如都是采用继承式的写法,单样式都写成一行);

标注样式编写人,各模块都及时标注(标注关键样式调用的地方);

页面进行标注(例如 页面 模块 开始和结束);

CSS跟HTML 分文件夹并行存放,命名都得统一(例如style.css);

JS 分文件夹存放 命名以该JS功能为准的英文翻译。

图片采用整合的 images.png png8 格式文件使用 尽量整合在一起使用方便将来的管理

如何设计突发大规模并发架构?

说说最近最流行的一些东西吧?常去哪些网站?

Node.js、Mongodb、npm、MVVM、MEAN、three.js

移动端(Android IOS)怎么做好用户体验?

清晰的视觉纵线、信息的分组、极致的减法、
利用选择代替输入、标签及文字的排布方式、
依靠明文确认密码、合理的键盘利用、

你在现在的团队处于什么样的角色,起到了什么明显的作用?

你认为怎样才是全端工程师(Full Stack developer)?

介绍一个你最得意的作品吧?

你的优点是什么?缺点是什么?

如何管理前端团队?

最近在学什么?能谈谈你未来3,5年给自己的规划吗?

想问公司的问题?

问公司问题:
目前关注哪些最新的Web前端技术(未来的发展方向)?
前端团队如何工作的(实现一个产品的流程)?
公司的薪资结构是什么样子的?